package lzy.impl.smallspring.beans.factory.config;

import lzy.impl.smallspring.beans.BeansException;
import lzy.impl.smallspring.beans.factory.ConfigurableListableBeanFactory;


/**
 * 在完成属性加载但未实例化对象之前，基于ConfigurableListableBeanFactory暴露的接口提供自定义修改BeanDefinition的能力，主要是修改PropertyValue的能力
 *
 * 从这里可以看到ConfigurableListableBeanFactory接口存在的必要，它其实抽出一条用于后处理BeanDefinition的入口
 */
public interface BeanFactoryPostProcessor {

    /**
     * 在所有的 BeanDefinition 加载完成后，实例化 Bean 对象之前，提供修改 BeanDefinition 属性的机制
     *
     * @param beanFactory
     * @throws BeansException
     */
    void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException;
}
